/**
 * This is an interface representing the basic operations expected of
 * any implementation of a map.  A map is a set of (key, value) pairs.
 * 
 * @param <K> the type of the keys
 * @param <V> the type of the values
 * 
 * !!!!! DO NOT MODIFY THIS FILE !!!!!
 */

public interface MyMap<K, V>
{
	
	/**
	 * put -- Add the (key, value) pair to the map if the key does not
	 *   already exist in the map, or update the key to the new value
	 *   if it does exist
	 * @param key The key to add/update
	 * @param val The value to add
	 */
	public void put(K key, V val);
	
	/**
	 * get -- Retrieve the value associated with the specified key 
	 * @param key The key to retrieve
	 * @return the value associated with the given key, or null if no
	 *   value exists for the key
	 */
	public V get(K key);
	
	/**
	 * remove -- Remove the mapping associated with the key from the map
	 * @param key The key to remove
	 * @return true if the key was successfully removed, false otherwise
	 */
	public boolean remove(K key);
	
	/**
	 * contains -- Determine if the specified key exists in the map
	 * @param key The key to check
	 * @return true if the key exists in the map, false otherwise
	 */
	public boolean contains(K key);
	
	/**
	 * clear -- Empty the map of all keys and values
	 */
	public void clear();
	
	/**
	 * keySet -- Get all of the keys stored in the map
	 * @return a set containing all of the keys in the map
	 */
	public java.util.Set<K> keySet();
	
}
